package com.foreknow.demo25;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * 1.
 * I(Input输入)/O(Output输出)：I/O流  输入流/输出流
 * 对文件读操作：使用输入流
 * 对文件的写操作：使用输出流
 *
 * 2.流的分类
 * 2.1 输入流(InputStream)/输出流(OutputStream)
 * public abstract class InputStream extends Object  这个抽象类是表示输入字节流的所有类的超类。
 * public abstract class OutputStream extends Object 这个抽象类是表示字节输出流的所有类的超类。
 *
 * 2.2 字节流/字符流：例如要对图片进行copy可以使用字节流，对普通的文件 操作就可以使用字符流
 * 在API文档中：凡是以InputStream/OutputStream结尾的都是字节流   凡是以Reader/Writer结尾的都是字符流
 *
 * 2.3 节点流/处理流：节点流会直接关联到数据源上而处理流是对节点流功能的增强(不会直接关联到数据源上)
 *     可以查看构造器来确定是节点流还是处理流
 * 注意： InputStream OutputSteam  Reader  Writer这四个类是根父类
 *       所有字节流的根父类：InputStream OutputSteam
 *       所有字符流的根父类：Reader  Writer
 */
public class TestIO {
  public static void main(String[] args) {

    try {
      //使用FileInputStream对数据源进行读取字节
      FileInputStream fis = new FileInputStream("个人头像.jpeg");
      //使用FileOutputStream向目标文件中写字节
      FileOutputStream fos = new FileOutputStream("abc.jpeg");
      //读取源文件中的一个字节
      int read = fis.read();
      while(read!=-1) {
        //将读取到的字节写入到目标文件中abc.jpeg中
        fos.write(read);
        //读取下一个字节
        read = fis.read();
      }
      //关闭资源
      fos.close();
      fis.close();

    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }

  }
}
